package com.pic.mgt.scheduler;

import java.util.Date;
import java.util.Map;

/**
 * [Job 排程執行與管理]
 * @author 洪政緯
 *
 */
public interface AutoJob {
	
	/**
	 * 加入工作排程
	 * @param executionTime 工作執行時間
	 * @param jobClass 工作執行類別
	 * @param jobData 工作資料內容
	 */
	public void scheduleSimpleJob(Date executionTime, Class jobClass,
								  Map jobData, String jobName, String groupName)
								throws ScheduleAutoJobException;
	
	/**
	 * 重設工作排程時間
	 * @param newExecutionTime 新的工作執行時間
	 * @param groupName 工作的群組名稱
	 * @param jobName 工作名稱
	 */
	public void rescheduleSimpleJob(Date newExecutionTime,
							  String groupName,
							  String jobName)
							  throws ScheduleAutoJobException;
	
	/**
	 * 刪除工作排程
	 * @param groupName 工作的群組名稱
	 * @param jobName 工作名稱
	 */
	public void removeScheduledJob(String groupName, String jobName)
									throws ScheduleAutoJobException;
	
	/**
	 * 暫時停止排程運作
	 */
	public void haltAutoJob();
	
	/**
	 * 開始(恢復)排程運作
	 */
	public void startAutoJob() throws ScheduleAutoJobException;
	
	/**
	 * 關閉排程。一旦關閉排程則沒有辨法再 restart，必須重新初始化。
	 * 關閉排程會等待正在執行中的 Job 都執行完了,才會完成關閉的動作。
	 */
	public void shutdownAutoJob();
	
	/**
	 * 排程作業是否為暫停的狀態
	 */
	public boolean isHalted();
	
	/**
	 * 排程是否已停止
	 */
	public boolean isShutdown();
	
	/**
	 * 排程是否執行中
	 */
	public boolean isStarted();
}
